// 数据统计与分析模块
const db = wx.cloud.database();
const recordCollection = db.collection('records');
const paperCollection = db.collection('papers');
const userCollection = db.collection('users');
const _ = db.command;

/**
 * 获取试卷统计分析
 * @param {String} paperId 试卷ID
 * @returns {Promise} 统计结果
 */
async function getPaperStatistics(paperId) {
  try {
    // 调用云函数获取统计数据
    const result = await wx.cloud.callFunction({
      name: 'statistics-paper',
      data: {
        paperId
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取试卷统计失败', error);
    return {
      success: false,
      message: '获取试卷统计失败: ' + error.message
    };
  }
}

/**
 * 获取班级成绩分析
 * @param {String} classId 班级ID
 * @param {String} paperId 试卷ID（可选）
 * @returns {Promise} 班级成绩分析
 */
async function getClassStatistics(classId, paperId = null) {
  try {
    // 调用云函数获取班级成绩分析
    const result = await wx.cloud.callFunction({
      name: 'statistics-class',
      data: {
        classId,
        paperId
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取班级成绩分析失败', error);
    return {
      success: false,
      message: '获取班级成绩分析失败: ' + error.message
    };
  }
}

/**
 * 获取学生个人成绩分析
 * @param {String} userId 用户ID（可选，默认当前用户）
 * @param {String} subject 学科（可选）
 * @returns {Promise} 个人成绩分析
 */
async function getStudentStatistics(userId = null, subject = null) {
  try {
    // 如果没有指定用户，获取当前用户ID
    if (!userId) {
      const userInfo = await wx.cloud.callFunction({
        name: 'getUser',
        data: {}
      });
      userId = userInfo.result.openid;
    }
    
    // 调用云函数获取个人成绩分析
    const result = await wx.cloud.callFunction({
      name: 'statistics-student',
      data: {
        userId,
        subject
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取个人成绩分析失败', error);
    return {
      success: false,
      message: '获取个人成绩分析失败: ' + error.message
    };
  }
}

/**
 * 获取知识点掌握情况分析
 * @param {String} userId 用户ID（可选，默认当前用户）
 * @param {String} subject 学科
 * @returns {Promise} 知识点掌握情况
 */
async function getKnowledgeStatistics(userId = null, subject) {
  try {
    // 如果没有指定用户，获取当前用户ID
    if (!userId) {
      const userInfo = await wx.cloud.callFunction({
        name: 'getUser',
        data: {}
      });
      userId = userInfo.result.openid;
    }
    
    // 调用云函数获取知识点掌握情况
    const result = await wx.cloud.callFunction({
      name: 'statistics-knowledge',
      data: {
        userId,
        subject
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取知识点掌握情况失败', error);
    return {
      success: false,
      message: '获取知识点掌握情况失败: ' + error.message
    };
  }
}

/**
 * 获取学生错题分析
 * @param {String} userId 用户ID（可选，默认当前用户）
 * @param {String} subject 学科（可选）
 * @returns {Promise} 错题分析
 */
async function getWrongQuestionAnalysis(userId = null, subject = null) {
  try {
    // 如果没有指定用户，获取当前用户ID
    if (!userId) {
      const userInfo = await wx.cloud.callFunction({
        name: 'getUser',
        data: {}
      });
      userId = userInfo.result.openid;
    }
    
    // 调用云函数获取错题分析
    const result = await wx.cloud.callFunction({
      name: 'statistics-wrong',
      data: {
        userId,
        subject
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取错题分析失败', error);
    return {
      success: false,
      message: '获取错题分析失败: ' + error.message
    };
  }
}

/**
 * 导出成绩数据
 * @param {String} paperId 试卷ID
 * @param {String} classId 班级ID（可选）
 * @returns {Promise} 导出结果
 */
async function exportGradeData(paperId, classId = null) {
  try {
    // 调用云函数导出成绩数据
    const result = await wx.cloud.callFunction({
      name: 'export-grade',
      data: {
        paperId,
        classId
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('导出成绩数据失败', error);
    return {
      success: false,
      message: '导出成绩数据失败: ' + error.message
    };
  }
}

/**
 * 获取学生学习进度
 * @param {String} userId 用户ID（可选，默认当前用户）
 * @param {String} subject 学科
 * @returns {Promise} 学习进度
 */
async function getStudyProgress(userId = null, subject) {
  try {
    // 如果没有指定用户，获取当前用户ID
    if (!userId) {
      const userInfo = await wx.cloud.callFunction({
        name: 'getUser',
        data: {}
      });
      userId = userInfo.result.openid;
    }
    
    // 调用云函数获取学习进度
    const result = await wx.cloud.callFunction({
      name: 'statistics-progress',
      data: {
        userId,
        subject
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取学习进度失败', error);
    return {
      success: false,
      message: '获取学习进度失败: ' + error.message
    };
  }
}

/**
 * 获取教师教学质量分析
 * @param {String} teacherId 教师ID（可选，默认当前用户）
 * @param {String} subject 学科（可选）
 * @returns {Promise} 教学质量分析
 */
async function getTeachingQualityAnalysis(teacherId = null, subject = null) {
  try {
    // 如果没有指定教师，获取当前用户ID
    if (!teacherId) {
      const userInfo = await wx.cloud.callFunction({
        name: 'getUser',
        data: {}
      });
      teacherId = userInfo.result.openid;
    }
    
    // 调用云函数获取教学质量分析
    const result = await wx.cloud.callFunction({
      name: 'statistics-teaching',
      data: {
        teacherId,
        subject
      }
    });
    
    return {
      success: true,
      ...result.result
    };
  } catch (error) {
    console.error('获取教学质量分析失败', error);
    return {
      success: false,
      message: '获取教学质量分析失败: ' + error.message
    };
  }
}

module.exports = {
  getPaperStatistics,
  getClassStatistics,
  getStudentStatistics,
  getKnowledgeStatistics,
  getWrongQuestionAnalysis,
  exportGradeData,
  getStudyProgress,
  getTeachingQualityAnalysis
}; 